package com.sxj.corejava.code06_lambda表达式;

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

/**
 * @author 石小俊
 * @date 2023年12月2023/12/23日 8:41
 */
public class Test04_断言型接口 {

    public static void main(String[] args) {
        List list = Arrays.asList("南京", "苏州", "无锡", "常州", "泰州", "盐城", "徐州", "连云港", "扬州", "宿迁", "南通", "淮安", "镇江");
        // 匿名内部类用法
        testPredicate(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                // 制定断言规则
                // 返回城市名中包含州的城市
                return s.contains("州");
            }
        }, list);
        System.out.println("----------------------");
        // Lambda表达式
        testPredicate(s -> !s.contains("州"), list);
    }

    /**
     * 断言型接口,方法:boolean test(T t)
     * 其接口泛型类型与方法的参数类型一致
     * 其方法返回值是一个布尔类型,一般用于判断给定的参数是否符合指定的规则
     * 其具体规则由方法调用者实现
     *
     * @param predicate
     * @param list
     */
    public static void testPredicate(Predicate<String> predicate, List<String> list) {
        for (String city : list) {
            if (predicate.test(city)) {
                // 当断言型接口方法的返回值为true时,打印对应的内容
                System.out.println(city);
            }
        }
    }

}
